package org.dromara.hm.job;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.hm.domain.HmTodoItems;
import org.dromara.hm.domain.bo.HmTodoItemsBo;
import org.dromara.hm.mapper.HmTodoItemsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * @Author If404 Hzy
 * @Date 2025-2025/1/19-19:52
 * @Version 1.0
 */
@Service
public class HmBusinessJob
{
    /**
     *  订单销售之后若3天,7天,10天未回访,通过SSE向对应销售员推送消息
     */
    @Autowired
    private HmTodoItemsMapper todoItemsMapper;


    /**
     * 检查并生成回访提醒任务
     */
//    @Scheduled(cron = "0 0 8 * * ?") // 每天上午8点执行
    public void checkAndCreateFollowUpTasks() {
        // 查询所有未完成的回访任务
        QueryWrapper<HmTodoItems> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("todo_type", "0");
        queryWrapper.eq("status", "0"); // 未完成
        List<HmTodoItems> todoList = todoItemsMapper.selectList(queryWrapper);

        for (HmTodoItems todoItem : todoList) {
            Date followTime = todoItem.getFollowTime();
            long daysDiff = DateUtils.differentDaysByMillisecond(followTime, new Date());

            if (daysDiff >= 3 && daysDiff < 5) {
                // 3天回访未完成，生成5天回访提醒
                createFollowUpTask(todoItem, 3, "销售人员", "店长");
            } else if (daysDiff >= 5 && daysDiff < 7) {
                // 5天回访未完成，生成7天回访提醒
                createFollowUpTask(todoItem, 5, "超级管理员");
            }
        }
    }

    /**
     * 创建回访提醒任务
     *
     * @param todoItem     原始任务
     * @param days         提醒天数
     * @param notifyRoles  需要通知的角色
     */
    private void createFollowUpTask(HmTodoItems todoItem, int days, String... notifyRoles) {
        HmTodoItems newTodoItem = new HmTodoItems();
        newTodoItem.setTodoType("0");
        newTodoItem.setFollowCustomerId(todoItem.getFollowCustomerId()); // 回访客户id
        newTodoItem.setFollowCustomerName(todoItem.getFollowCustomerName()); // 回访客户名称
        newTodoItem.setFollowType(todoItem.getFollowType());
        //newTodoItem.setFollowTime(DateUtils.addDays(new Date(), days));
        newTodoItem.setTodoPersonId(todoItem.getTodoPersonId());
        newTodoItem.setTodoPersonName(todoItem.getTodoPersonName());
        newTodoItem.setStatus("0"); // 未完成
        newTodoItem.setTodoDesc("客户:"+todoItem.getFollowCustomerName()+"回访任务已超过:"+days + "天");
        newTodoItem.setTodoDesc("回访提醒");
        newTodoItem.setCreateType("1"); // 系统生成
        todoItemsMapper.insert(newTodoItem);
        // 发送通知
        for (String role : notifyRoles) {
           // notificationService.sendNotification(role, "回访提醒", "您有一条新的回访任务需要处理！");
        }
    }
}
